home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 41
/
Amiga Format CD41 (1999-06)(Future Publishing)(GB)[!][issue 1999-07].iso
/
-seriously_amiga-
/
cd-rom
/
acdb
/
src
/
acdb_arexx.e
< prev
next >
Wrap
Text File
|
1999-04-28
|
5KB
|
194 lines
OPT MODULE,OSVERSION=37
OPT PREPROCESS,REG=5
/*
*-- AutoRev header do NOT edit!!
*
* Project : AMIGA CD BASE - program obsîugujâcy CDDB
* File : acdb_arexx.e
* Description : procedury obsîugujâce port arexxa programu
* Copyright : ©1997-1999 Piotr Gapiïski
* Author : Piotr Gapiïski
* Creation Date : 10.03.99
* Current version : 1.0
* Translator : AmigaE v3.3a
*
* REVISION HISTORY
*
* 1.0 (10.03.99)
* o moduî nie powoduje kîopotów w przypadku braku biblioteki easyrexx
* gdy biblioteka nie jest zainicjalizowana arxSigs() zwraca 0, a
* arxPortName() zwraca 'N/A'
*
* 0.6 (06.10.98)
* o wykorzystuje bibliotekë easyrexx, która MUSI byê wczeôniej otwarta
* o procedury obsîugujâce rozkazy arexx'a sâ wywoîywane w konwencji
* rc:=proc(arxArgs,userdata)
* gdzie userdata jest dowolnie definiowalna (podczas arxHandle), procedura
* powinna zwróciê FALSE gdy wymagany jest koniec programu, inne dane do
* przekazywania z procedury naleûy umieszczaê w arxArgs
* o arxSend domyôlnie wysyîa dane do portu interpretera arexx'a traktujâc je
* jako nazwy plików do wykoania
*
*-- REV_END --*
*/
MODULE 'easyrexx','libraries/easyrexx','libraries/easyrexx_macros'
MODULE 'rexx/errors'
MODULE 'utility/tagitem','exec/ports','exec/lists','intuition/intuition'
MODULE '*acdb_debug'
#ifdef DEBUG
MODULE 'tools/debug'
#define D(a,b) kputfmt(a,b)
#endif
#ifndef DEBUG
#define D(a,b)
#endif
EXPORT DEF prg_name:PTR TO CHAR, prg_vers:PTR TO CHAR, prg_copy:PTR TO CHAR
EXPORT OBJECT arxArgs
argv :PTR TO LONG ->- tablica parametrów komendy
rc :LONG ->- kod bîëdu
rclong :LONG ->- rezultat (long)
rcstring :PTR TO CHAR ->- rezultat (string)
err :PTR TO CHAR ->- opis bîëdu (dostëpny via GET LASTERROR)
ENDOBJECT
CONST MAXLONG = 2147483647
DEF arctx:PTR TO arexxcontext, cmd:PTR TO arexxcommandtable
EXPORT PROC arxSetup(cmdtable=NIL)
->-
->- inicjalizacja portu arexx'a programu
->- jeûeli biblioteka (easyrexx) nie bëdzie otwarta to port arexx'a nie zostanie
->- zainicjalizowany
->-
IF (easyrexxbase = NIL) THEN RETURN NIL
cmd := cmdtable
arctx := AllocARexxContextA(
[
ER_Portname, prg_name,
ER_CommandTable, cmdtable,
ER_Author, prg_copy,
ER_Copyright, prg_copy,
ER_Version, prg_vers + 6,
TAG_DONE
])
ENDPROC arctx
EXPORT PROC arxCleanUp()
->-
->- zwalnianie pamiëci zajmowanej przez port arexx'a
->-
IF (arctx) THEN FreeARexxContext(arctx)
arctx := NIL
ENDPROC
EXPORT PROC arxSigs()
DEF rc=0
IF (arctx)
ER_SETSIGNALS(arctx, ER_SIGNAL(arctx))
rc := ER_SIGNALS(arctx)
ENDIF
ENDPROC rc
EXPORT PROC arxPortName() IS IF (arctx) THEN arctx.portname ELSE 'N/A'
EXPORT PROC arxHandle(userdata=NIL)
->-
->- procedura obsîugujâca sygnaîy napîywajâce do portu arexx'a
->- funkcje obsîugujâce poszczególne komendy arexx'a sâ wywoîywane w konwencji
->- rc := func(args:PTR TO arxArgs, userdata)
->- gdy rc=FALSE to nastëpuje zakoïczenie dziaîania funkcji
->-
DEF id, running, func, i, args:arxArgs
IF (cmd = NIL) THEN RETURN TRUE
running := TRUE
WHILE GetARexxMsg(arctx)
id := arctx.id
->-
->- zainicjuj strukturë przekazywanâ do wywoîywanej funkcji
->-
args.argv := arctx.argv
args.rc := RC_OK
args.rclong := MAXLONG
args.rcstring := NIL
args.err := NIL
->-
->- odszukaj odpowieni rozkaz i wywoîaj go
->-
i := 0
WHILE (func := cmd[i].userdata)
IF (cmd[i].id = id) THEN running := func(args, userdata)
EXIT (cmd[i].id = id)
INC i
ENDWHILE
ReplyARexxMsgA(arctx,
[
ER_ReturnCode, args.rc,
IF (args.rcstring) THEN ER_ResultString ELSE TAG_IGNORE, args.rcstring,
IF (args.rclong <> MAXLONG) THEN ER_ResultLong ELSE TAG_IGNORE, args.rclong,
IF (args.err) THEN ER_ErrorMessage ELSE TAG_IGNORE, args.err,
->-
->- jeûeli zostanie to odblokowane to komenda arexx'a GET LASTERROR bëdzie
->- zwraca kod bîëdu ostatniej instrukcji a nie ostatni bîâd
->-
->- ER_ErrorMessage, args.err,
->-
TAG_DONE
])
EXIT (running = FALSE)
ENDWHILE
ENDPROC running
EXPORT PROC arxSend(cmd, portname=NIL:PTR TO CHAR, file=TRUE)
->-
->- procedura wysyîajâca do portu arexx'a (portname) komendë (cmd)
->- komenda moûna okreôlaê skrypt arexx'a, który ma byê uruchomiony (file = TRUE)
->- przesyîanie jesy SYNCHRONICZNE
->-
DEF rc
rc:=SendARexxCommandA(cmd,
[
ER_Asynch, 0,
IF (portname) THEN ER_Portname ELSE TAG_IGNORE, portname,
ER_Context, arctx,
IF (file) THEN ER_File ELSE ER_String, 1,
TAG_DONE
])
ENDPROC rc